// 用户认证状态管理工具

// 内存中保存当前用户名
let currentUserName = null;

// 设置当前用户名
export const setCurrentUserName = (userName) => {
  currentUserName = userName;
};

// 获取当前用户名
export const getCurrentUserName = () => {
  return currentUserName;
};

// 清除当前用户名
export const clearCurrentUserName = () => {
  currentUserName = null;
};

// 保存SaToken信息
export const setSaToken = (saTokenInfo) => {
  // 存储完整的SaToken信息
  localStorage.setItem('saTokenInfo', JSON.stringify(saTokenInfo));
  // 为了兼容之前的代码，同时存储tokenValue作为token
  localStorage.setItem('token', saTokenInfo.tokenValue);
  
  // 从saTokenInfo提取用户名 (可能在tokenInfo.loginId中，格式为'userName:xxx')
  let userName = null;
  if (saTokenInfo && saTokenInfo.userName) {
    userName = saTokenInfo.userName;
  } else if (saTokenInfo && saTokenInfo.loginId && saTokenInfo.loginId.includes(':')) {
    // 有些版本的SaToken可能将userName存在loginId字段中，格式为"username:xxx"
    userName = saTokenInfo.loginId.split(':')[0];
  }
  
  // 保存用户名到内存中
  if (userName) {
    setCurrentUserName(userName);
  }
};

// 获取SaToken信息
export const getSaToken = () => {
  const saTokenInfo = localStorage.getItem('saTokenInfo');
  if (!saTokenInfo || saTokenInfo === "undefined") {
    return null;
  }
  try {
    return JSON.parse(saTokenInfo);
  } catch (error) {
    // 解析失败时清除错误的数据
    removeSaToken();
    return null;
  }
};

// 删除SaToken信息
export const removeSaToken = () => {
  localStorage.removeItem('saTokenInfo');
};

// 保存令牌
export const setToken = (token) => {
  localStorage.setItem('token', token);
};

// 获取令牌
export const getToken = () => {
  return localStorage.getItem('token');
};

// 删除令牌
export const removeToken = () => {
  localStorage.removeItem('token');
};

// 保存用户信息
export const setUserInfo = (userInfo) => {
  localStorage.setItem('userInfo', JSON.stringify(userInfo));
};

// 获取用户信息
export const getUserInfo = () => {
  const userInfo = localStorage.getItem('userInfo');
  // 检查 userInfo 是否为 null 或 "undefined" 字符串
  if (!userInfo || userInfo === "undefined") {
    return null;
  }
  try {
    return JSON.parse(userInfo);
  } catch (error) {
    // 解析失败时清除错误的数据
    removeUserInfo();
    return null;
  }
};

// 删除用户信息
export const removeUserInfo = () => {
  localStorage.removeItem('userInfo');
};

// 检查是否已登录
export const isLoggedIn = () => {
  // 检查内存中是否有用户名（最可靠的方式）
  const memoryUserName = getCurrentUserName();
  if (memoryUserName) {
    return true;
  }
  
  // 优先使用SaToken检查登录状态
  const saTokenInfo = getSaToken();
  
  if (saTokenInfo && saTokenInfo.isLogin) {
    return true;
  }
  
  // 向后兼容旧的检查方式
  const hasToken = !!getToken();
  const userInfo = getUserInfo();
  const hasUserInfo = !!userInfo;
  
  // 如果有用户信息，把用户名保存到内存中
  if (hasUserInfo && userInfo.userName) {
    setCurrentUserName(userInfo.userName);
  }
  
  return hasToken && hasUserInfo;
};

// 保存用户名到本地存储
export const setRememberedUsername = (username) => {
  localStorage.setItem('rememberedUsername', username);
};

// 获取保存的用户名
export const getRememberedUsername = () => {
  return localStorage.getItem('rememberedUsername');
};

// 删除保存的用户名
export const removeRememberedUsername = () => {
  localStorage.removeItem('rememberedUsername');
};

// 完整登出
export const logout = () => {
  // 清除内存中的用户名
  clearCurrentUserName();
  
  // 清除localStorage中的数据
  removeToken();
  removeSaToken();
  removeUserInfo();
  localStorage.removeItem('loginId'); // 清除旧的loginId
  
  // 清除用户信息缓存
  localStorage.removeItem('cachedUserInfo');
  localStorage.removeItem('userInfoCacheTimestamp');
  
  // 清除sessionStorage中的数据
  sessionStorage.removeItem('profileData');
  sessionStorage.removeItem('profileDataTimestamp');
  
  // 不删除记住的用户名，方便下次登录
}; 